/**
 * 研发项目流程数据模型
 */

const BaseProjectModel = require('./base_project_model.js');

class ResearchProjectFlowModel extends BaseProjectModel {

    /**
     * 构造函数
     */
    constructor() {
        super();

        // 设置数据集合
        this.CL = this.constructor.C('research_project_flow');

        // 字段字典
        this.DAO_FIELD_PREFIX = "RF"; // 表前缀
    }

    /**
     * 获取流程字段结构
     */
    static get DB_STRUCTURE() {
        return {
            _id: 'string|id',
            PROJECT_ID: 'string|id|must',           // 项目ID
            PROJECT_TITLE: 'string|must',           // 项目标题
            STATUS_CODE: 'int|must',                // 状态码
            STATUS_NAME: 'string|must',             // 状态名称
            FLOW_NOTE: 'string',                    // 流程备注
            ADD_TIME: 'int|must',                   // 添加时间
            ADD_PERSON_ID: 'string',                // 添加人ID
            ADD_PERSON_NAME: 'string',              // 添加人姓名
            EVENT_ID: 'string',                     // 事件ID
            EVENT_NAME: 'string',                   // 事件名称
            DOCUMENTS: 'array',                     // 附件文档
            
            // 兼容controller使用的字段
            FLOW_STATUS: 'int',                     // 流转状态
            FLOW_STATUS_BEFORE: 'int',              // 流转前状态
            FLOW_STATUS_AFTER: 'int',               // 流转后状态
            FLOW_ACTIVE_STATUS_BEFORE: 'int',       // 流转前活跃状态
            FLOW_ACTIVE_STATUS_AFTER: 'int',        // 流转后活跃状态
            FLOW_TIME: 'int',                       // 流转时间
            FLOW_USER_ID: 'string',                 // 流转操作用户ID
            FLOW_USER_NAME: 'string',               // 流转操作用户姓名
            TO_STATUS: 'int',                       // 目标状态
            TO_STATUS_NAME: 'string',               // 目标状态名称
            TO_ACTIVE_STATUS: 'int',                // 目标活跃状态
            
            // 兼容service层使用的字段
            projectId: 'string|false',              // 项目ID (兼容service)
            createTime: 'int|false'                 // 创建时间 (兼容service)
        };
    }

    /**
     * 获取流程列表
     */
    async getFlowList(projectId, options = {}) {
        // 设置排序条件
        let orderBy = {
            ADD_TIME: -1
        };

        // 设置分页
        let page = options.page || 1;
        let size = options.size || 10;
        let offset = (page - 1) * size;
        let limit = size;

        // 设置查询条件
        let where = {
            PROJECT_ID: projectId
        };

        // 查询记录总数
        let total = await this.count(where);

        // 查询记录
        let list = await this.getAll(where, orderBy, offset, limit);

        // 格式化返回数据
        let result = [];
        for (let k = 0; k < list.length; k++) {
            result.push(list[k]);
        }

        return {
            total,
            list: result
        };
    }

    /**
     * 添加流程记录
     */
    async addFlow(data) {
        // 设置添加时间
        if (!data.ADD_TIME) {
            data.ADD_TIME = this._timestamp;
        }
        
        // 兼容service层
        if (data.createTime && !data.ADD_TIME) {
            data.ADD_TIME = data.createTime;
        }
        
        return await this.insert(data);
    }

    /**
     * 获取最近的流程记录
     */
    async getLatestFlow(projectId) {
        let where = {
            PROJECT_ID: projectId
        };
        
        let orderBy = {
            ADD_TIME: -1
        };
        
        return await this.getOne(where, orderBy);
    }
}

module.exports = new ResearchProjectFlowModel(); 
